]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
st-theme-node: Recalculate properties on stylesheet changes
authorFlorian Müllner <fmuellner@gnome.org>
Mon, 28 Jan 2013 19:38:36 +0000 (20:38 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Fri, 1 Feb 2013 16:28:40 +0000 (17:28 +0100)
As theme nodes keep a cache of matched properties, we need to make
sure to update it when the list of stylesheets changes. In particular
this fixes a regression from commit dc2ec0a8f95baa, which caused
extensions with stylesheets to crash the shell when re-enabled (for
instances when coming back from the lock screen).

https://bugzilla.gnome.org/show_bug.cgi?id=692994

src/st/st-theme-node.c

index dc3fcc25e7b58bafce3110ad98c956847b6c84c7..549090d1015e5a4deb5aabe4e40d2e4f67e9bab3 100644 (file)
@@ -61,6 +61,14 @@ st_theme_node_class_init (StThemeNodeClass *klass)
   object_class->finalize = st_theme_node_finalize;
 }
 
+static void
+on_custom_stylesheets_changed (StTheme *theme,
+                               gpointer data)
+{
+  StThemeNode *node = data;
+  node->properties_computed = FALSE;
+}
+
 
 static void
 st_theme_node_dispose (GObject *gobject)
@@ -85,6 +93,10 @@ st_theme_node_dispose (GObject *gobject)
       node->icon_colors = NULL;
     }
 
+  if (node->theme)
+    g_signal_handlers_disconnect_by_func (node->theme,
+                                          on_custom_stylesheets_changed, node);
+
   g_clear_object (&node->theme);
 
   G_OBJECT_CLASS (st_theme_node_parent_class)->dispose (gobject);
@@ -221,10 +233,11 @@ st_theme_node_new (StThemeContext    *context,
     theme = parent_node->theme;
 
   if (theme != NULL)
-    node->theme = theme;
-
-  if (node->theme != NULL)
-    g_object_ref (node->theme);
+    {
+      node->theme = g_object_ref (theme);
+      g_signal_connect (node->theme, "custom-stylesheets-changed",
+                        G_CALLBACK (on_custom_stylesheets_changed), node);
+    }
 
   node->element_type = element_type;
   node->element_id = g_strdup (element_id);